package com.alibaba.citrus.ots.sales.plan.functions.salesplan;

import com.alibaba.citrus.ots.sales.plan.sdo.SalesPlanSDO;
import com.google.common.collect.Lists;
import org.springframework.stereotype.Component;

import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author yuhailin
 * @description:
 * @date 2021-09-06 19:01
 */
@Component
public class SalesPlanAbility {

    /**
     * 创建月度计划后 模版操作
     * @param
     * @return
     */
    Boolean salesPlanTemplate(SalesPlanSDO salesPlanSDO){
        /**
         * 1、查询比当前创建月度计划时间晚，距离当前时间最近的一条月度计划任务
         *  1.1、如果未查询到历史记录 end
         *  1.2、查询到历史月度计划记录
         *      a、计划客户容器A（存放明细中抽出的有效客户信息 不可重复）
         *         计划货品容器B（存档明细中抽出的有效货品信息 不可重复）
         *         计划明细容器C（存放计划明细数据 不可重复）
         *      b、for循环，分页查询计划明细 1000条处理一批
         *         b1、获取明细中的客户地址List<String> + 业务单元code + 状态（有效） 查询客户地址表
         *        （筛选掉无效状态的客户）
         *         b2、获取剩下明细中货品List<String> + 业务单元code + 状态（有效）查询计划货品范围表
         *        （筛选掉无效状态的货品）
         *         b3、抽出客户信息，放入容器A中
         *             抽出货品信息，放入容器B中
         *         b4、剩下的明细数据设置新建的planId
         *            if （明细量大于等于500） 批量保存明细数据 continue
         *            else if (明细量小于500 && （处理明细数据量 + 容器C的大小）大于等于 500）将容器C中的数据取出和处理中的明细批量保存数据库 continue
         *            else 处理明细数据放入容器C中
         *       c、循环容器A,批量保存容器A中的信息
         *       d、循环容器B,批量保存容器B中的信息
         *
         *
         */
        return true;
    }

    public static void main(String[] args) {
        List<String> list = Lists.newArrayList("a","b","c");
        List<String> collect = list.stream().limit(2).collect(Collectors.toList());
        list.removeAll(collect);
        list.forEach(System.out::println);
        System.out.println("-------------");
        collect.forEach(System.out::println);
    }
}
